//=============================
// データベースページクラス
//=============================
App.ProjectfileIndexFile = function(){
    // スーパークラスコンストラクタ呼び出し
    App.ProjectfileIndexFile.superclass.constructor.call(this);
} ;

var app_file_index_methods = {

    tree_folder : null,
    tree_root : null,

    ds_list : null,
    grid_list : null,
	ctxMenu : null,
	ctxMenu_difolt : null,
	ctxMenu_file : null,
	password : null,
	check_pass_win : null,
	check_pass_flg : null,
	locked_flg : true,

    left_panel : null,
    center_panel : null,

	current_node   :"/",

    /*==================================================
     * 関数名：fncRender
     * 概　要：ページをレンダリングする
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    fncRender : function(){
        this.fncCreateFolderTree() ;
        this.fncCreateFileList() ;
        this.fncCreateLeftLayout() ;
        this.fncCreateCenterLayout() ;

    },
    
    /*==================================================
     * 関数名：fncSetEvent
     * 概　要：当該ページのイベントハンドラを設定する
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    fncSetEvent : function(){

    },

    /*==================================================
     * 関数名：fncCreateCenterLayout
     * 概　要：当該ページの中央エリアレイアウトを生成する
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    fncCreateCenterLayout : function(){
        var elmmain = Ext.get( 'file_index_file_area') ;
        this.center_panel = new Ext.Container({
            applyTo : elmmain,
            layout : 'border',
            monitorResize : true,
            border : false,
            items: [
            	this.grid_list
            ]
        }) ;
    },

    /*==================================================
     * 関数名：fncCreateLeftLayout
     * 概　要：当該ページの左側エリアレイアウトを生成する
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    fncCreateLeftLayout : function(){
        var elmmain = Ext.get( 'file_index_folder_area') ;
        this.left_panel = new Ext.Container({
            applyTo : elmmain,
            layout : 'border',
            monitorResize : true,
            border : false,
            items: [
            	this.tree_folder
            ]
        }) ;

        this.tree_folder.getLoader().addListener( 'beforeload', this.onTreeBeforeLoad, this, null ) ;
    },

    /*==================================================
     * 関数名：fncCreateFolderTree
     * 概　要：フォルダツリーを生成する
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    fncCreateFolderTree : function(){
	    //-----------------------------
        // ツリー生成
	    //-----------------------------
        this.tree_folder = new Ext.tree.TreePanel({
            autoScroll : true,
            animate : false,
            monitorResize : true ,
            region: 'center',
            margins: '0 0 0 0',
            loader: new Ext.tree.TreeLoader({
                dataUrl:url_for('/project/list_dirs/'),
                baseParams:{ id : Ext.get('project_id').dom.value }
            })
        });
        // set the root node
        this.tree_root = new Ext.tree.AsyncTreeNode({
            text: Ext.get('project_project_name').dom.value,
            draggable:false,
            id: "/"
        });
        this.tree_folder.setRootNode(this.tree_root);
        this.tree_root.expand();
        this.tree_root.select() ;

        this.tree_folder.addListener( "click", this.onNodeClick, this, null ) ;

	    // グリッド右クリックイベント
		this.tree_folder.on( "contextmenu", this.onRowContextMenu, this ) ;

	    //-----------------------------
        // コンテキストメニュー生成
	    //-----------------------------
        this.ctxMenu = new Ext.menu.Menu({id: this.tree_folder.id + "-hctx"});
        this.ctxMenu.add(
            {id:"row_folder_edit", text: "名前の変更", cls: "grid-ctx-menu-edit"},
            {id:"row_folder_delete", text: "削除", cls: "grid-ctx-menu-delete"}
        );
        this.ctxMenu.on("itemclick", this.onCtxMenuClick, this);

	    //-----------------------------
        // ディフォルトコンテキストメニュー生成
	    //-----------------------------
        this.ctxMenu_difolt = new Ext.menu.Menu({id: this.tree_folder.id + "-hctx2"});
        this.ctxMenu_difolt.add(
            {id:"rownew", text: app_localized_message("label", "newfolder"), cls: "grid-ctx-menu-new"}
        );
        this.ctxMenu_difolt.on("itemclick", this.onCtxMenuClick, this);

        this.tree_folder.getLoader().addListener( 'beforeload', this.onTreeBeforeLoad, this, null ) ;
    },

    /*==================================================
     * 関数名：onRowContextMenu
     * 概　要：グリッドコンテキストメニュー（右クリック）イベントハンドラ
     * 引　数：grid              Ext.grid.Grid                  グリッドオブジェクト
     *       ：rowIndex          Number                         クリック行インデックス
     *       ：e                 Ext.EventObject                イベントオブジェクト
     * 戻り値：なし
     ==================================================*/
    onRowContextMenu : function(node, e ){
        e.stopEvent();
        node.select();
        var pos = e.getXY() ;
        if (node.id == '/') {
            return false;
        } else {
            this.ctxMenu.showAt(pos) ;
        }
    },

    /*==================================================
     * 関数名：onCtxMenuClick
     * 概　要：コンテキストメニュークリックイベントハンドラ
     * 引　数：baseItem          Ext.menu.BaseItem              クリックされたアイテムオブジェクト
     *       ：e                 Ext.EventObject                イベントオブジェクト
     * 戻り値：なし
     ==================================================*/
    onCtxMenuClick : function(baseItem, e){
        switch( baseItem.id ){
            case 'row_folder_edit'     : this.fncInsideFolderEdit(); break ;// フォルダ名編集
            case 'row_folder_delete'   : this.fncGetInsideIdToDestroy(); break ;// 削除
		}
    },

    /*==================================================
     * 関数名：fncCreateFileList
     * 概　要：ファイルリストを生成する
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    fncCreateFileList : function(){
	    //-----------------------------
        // グリッドデータストア生成
	    //-----------------------------
        this.ds_list = new Ext.data.JsonStore({
            url: url_for('/project/list_files/'),
            baseParams:{ id : Ext.get('project_id').dom.value },
            root: "items",
		    fields:[
                    {name: 'id',                    mapping:'id'},
                    {name: 'ftype',                 mapping:'ftype'},
                    {name: 'fname',                 mapping:'fname'},
                    {name: 'size',                  mapping:'size'},
                    {name: 'mtime',                 mapping:'mtime'},
                    {name: 'mode',                  mapping:'mode'}
            ]
        });

        //-----------------------------
        // セレクションモデル生成
        //-----------------------------
//        var selModel = new Ext.grid.CheckboxSelectionModel();

        //-----------------------------
        // カラムモデル生成
        //-----------------------------
        var colModel = new Ext.grid.ColumnModel([
//            selModel,
			{header: app_localized_message("label", "fname"), width: 200, locked:false, sortable: true, dataIndex: 'fname', id:'fname', renderer: this.onFnameRenderer.createDelegate(this)},
			{header: app_localized_message("label", "size"), width: 100, locked:false, sortable: true, dataIndex: 'size', renderer: this.onNumberRenderer.createDelegate(this) },
			{header: app_localized_message("label", "mtime"), width: 130, locked:false, sortable: true, dataIndex: 'mtime', renderer: this.onDateRenderer.createDelegate(this)}
		]);

        //-----------------------------
        // グリッド生成
        //-----------------------------
        this.grid_list = new Ext.grid.GridPanel({
            el : 'file_index_file',
            ds: this.ds_list,
            cm: colModel,
//            sm : selModel,
            autoExpandColumn: 'fname',
            loadMask : true,
            monitorResize : true ,
            region: 'center',
            margins: '0 0 0 0'
        });
        this.grid_list.addListener( "rowcontextmenu", this.onGridRowContextMenu, this, null ) ;
        this.grid_list.addListener( "contextmenu", this.onGridContextMenu, this, null ) ;
        this.grid_list.addListener( "dblclick", this.onGridDbclick, this, null ) ;

        // コンテキストメニュー生成
        this._createCenterContextMenu();

    },

    /*==================================================
     * 関数名：onFnameRenderer
     * 概　要：ファイル名レンダラー
     * 引　数：value            Mixed                       アイテム名データ
     *       ：phash            Hash　                      セル情報
     *       ：rec              Ext.data.Record             行データオブジェクト
     *       ：rowIndex         Number                      行インデックス
     *       ：cellIndex        Number                      列インデックス
     *       ：datastore        Ext.data.JsonStore          データストアオブジェクト
     * 戻り値：なし
     ==================================================*/
    onFnameRenderer : function(value, phash, rec, rowIndex, cellIndex, datastore){
        var image ="" ;
        var ftype = rec.get("ftype");
        if( ftype == "directory"){
            image = '<img src="' + url_for("/images/ext-2.1/default/tree/folder.gif") + '" class="x-tree-node-icon" align="absmiddle">&nbsp;' ;
        }
        else{
            image = '<img src="' + url_for("/images/ext-2.1/default/tree/leaf.gif") + '" class="x-tree-node-icon" align="absmiddle">&nbsp;' ;
        }
        
        return image + value ;
    },

    /*==================================================
     * 関数名：onNumberRenderer
     * 概　要：数値レンダラー
     * 引　数：value            Mixed                       アイテム名データ
     *       ：phash            Hash　                      セル情報
     *       ：rec              Ext.data.Record             行データオブジェクト
     *       ：rowIndex         Number                      行インデックス
     *       ：cellIndex        Number                      列インデックス
     *       ：datastore        Ext.data.JsonStore          データストアオブジェクト
     * 戻り値：なし
     ==================================================*/
    onNumberRenderer : function(value, phash, rec, rowIndex, cellIndex, datastore){
        var ret ;
        if( value != "" ){
        	var num = String(value) ;
        	while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
        	ret = num ;
        }
        else{
            ret = "" ;
        }
        return ret ;
    },

    /*==================================================
     * 関数名：onDateRenderer
     * 概　要：日付レンダラー
     * 引　数：value            Mixed                       アイテム名データ
     *       ：phash            Hash　                      セル情報
     *       ：rec              Ext.data.Record             行データオブジェクト
     *       ：rowIndex         Number                      行インデックス
     *       ：cellIndex        Number                      列インデックス
     *       ：datastore        Ext.data.JsonStore          データストアオブジェクト
     * 戻り値：なし
     ==================================================*/
    onDateRenderer : function(value, phash, rec, rowIndex, cellIndex, datastore){
        var ret = value.substring(0,16) ;
        return ret ;
		},

    /** onGridRowContextMenu
     * フォルダ，ファイルの一覧のアイテムの右クリックメニュー
     * 
     * @param Ext.grid.ColumnModel grid
     * @param Int rowIndex
     * @param Ext.EventObject e
     */
    onGridRowContextMenu : function(grid, rowIndex, e )
    {
        var rec = this.ds_list.getAt(rowIndex) ;
        if(rec.get('id') == 0 )  return false ;

        e.stopEvent();
        var row = e.getTarget() ;
        var pos = e.getXY() ;

        this.onGridRowContextMenu_select(rec, rowIndex, e);

        var ftype = rec.get("ftype");
        if( ftype == "directory"){
            this.ctxMenu_folder.showAt(pos);// フォルダコンテキストメニューを開く
        } else {
            this.ctxMenu_file.showAt(pos);// ファイルコンテキストメニューを開く
        }
    },

    onGridRowContextMenu_select : function(rec, rowIndex, e)
    {
        var selmodel = this.grid_list.getSelectionModel();
        selmodel.selectRow(rowIndex);
    },

    /** onGridContextMenu
     * 何もないところを右クリックされたときの動作
     */
    onGridContextMenu : function(e) {
        e.stopEvent();
        var pos = e.getXY();
        this.ctxMenu_none.showAt(pos);// デフォルトコンテキストメニューを開く
    },

	onGridDbclick : function(){
        var selmodel = this.grid_list.getSelectionModel() ;
        var selrec = selmodel.getSelected() ;
				var id = selrec.get('id');

        var ftype = selrec.get("ftype");
        if( ftype == "directory"){
        	// フォルダに入る
			this.current_node = id + '/' ;

			var selnode = this.tree_folder.getNodeById(this.current_node) ;
			selnode.loaded = false ;
			selnode.expand() ;

			this.ds_list.load({params:{node:this.current_node}}) ;

        } else {
        	// ファイルをダウンロード
            this.fncDownloadFile();
        }

	},

    /**
     * コンテキストメニュー生成
     */
    _createCenterContextMenu : function()
    {
        // フォルダ用
        this.ctxMenu_folder = new Ext.menu.Menu({id: this.tree_folder.id + "-hctx-folder"});
        this.ctxMenu_folder.add(
            {id:"row_folder_edit", text: "名前の変更", cls: "grid-ctx-menu-edit"},
            {id:"row_folder_delete", text: "削除", cls: "grid-ctx-menu-delete"}
        );
        this.ctxMenu_folder.on("itemclick", this.onGridRowContextMenuClick_folder, this);

        // ファイル用
        this.ctxMenu_file = new Ext.menu.Menu({id: this.grid_list.id + "-hctx-file"});
        this.ctxMenu_file.add(
            {id:"downloadfile", text: app_localized_message("label", "downloadfile"), cls: "grid-ctx-menu-download"},
            {id:"destroyfile", text: app_localized_message("label", "destroyfile"), cls: "grid-ctx-menu-destroy"}
        );
        this.ctxMenu_file.on("itemclick", this.onGridRowContextMenuClick_file, this);// ファイル用

        // 空白部分
        this.ctxMenu_none = new Ext.menu.Menu({id: this.grid_list.id + "-hctx-none"});
        this.ctxMenu_none.add(
            {id:"row_none_folder_new", text: app_localized_message("label", "newfolder"), cls: "grid-ctx-menu-newfolder"},
            {id:"row_none_file_new", text: app_localized_message("label", "uploadfile"), cls: "grid-ctx-menu-upload"},
            {id:"refresh", text: app_localized_message("label", "refresh"), cls: "grid-ctx-menu-refresh"}
        );
        this.ctxMenu_none.on("itemclick", this.onGridRowContextMenuClick_none, this);// ファイル用
    },

    /** onGridRowContextMenuClick_folder
     * ファイルコンテキストメニュークリック時の動作
     * 
     * @param Hash
     * @param Ext.EventObject
     */
    onGridRowContextMenuClick_folder : function(item, e)
    {
        switch(item.id){
            case 'row_folder_delete'   : this.fncGetIdToDestroy(); break ;// 削除
            case 'row_folder_edit'     : this.fncFolderEdit(); break ;// フォルダ名編集
        }
    },

    /** onGridRowContextMenuClick_file
     * 
     * @param Hash
     * @param e Ext.event
     */
    onGridRowContextMenuClick_file : function(item, e){
        switch( item.id ){
            case 'downloadfile' : this.fncDownloadFile(); break ;
            case 'destroyfile'  : this.fncGetIdToDestroy(); break ;
        }
    },

    /** onGridRowContextMenuClick_none
     * 
     * @param Hash
     * @param e Ext.event
     */
    onGridRowContextMenuClick_none : function(item, e)
    {
        switch(item.id){
            case 'row_none_folder_new' : this.fncFolderNew(); break ;
            case 'row_none_file_new'   : this.fncFileNew(); break ;
            case 'refresh'      : this.fncFilesRefresh(); break ;
        }
    },

    fncDownloadFile : function(){
        var selmodel = this.grid_list.getSelectionModel() ;
        var selrec = selmodel.getSelected() ;
        var id = selrec.get("id") ;
        // プロジェクトIDを取得
        var project_id = Ext.get('project_id').dom.value ;
        // 現在のパスを取得
        var node = this.current_node ;

		var url = url_for("/projectfile/download");
		var form = Ext.get('projectfile_download') ;
		form.dom.action = url ;
        var elm = Ext.get('projectfile_download_project_id') ;
        elm.dom.value = project_id ;
        elm = Ext.get('projectfile_download_parent_node') ;
        elm.dom.value = node ;
        elm = Ext.get('projectfile_download_target_file') ;
        elm.dom.value = id ;
        elm = Ext.get('projectfile_download_browser_ie') ;
        elm.dom.value = Ext.isIE ? '1' : '0' ;
        form.dom.submit() ;
    
        return false ;
        
    },

	fncGetInsideIdToDestroy : function(){
        var selmdl = this.tree_folder.getSelectionModel() ;
        var selnode = selmdl.getSelectedNode() ;
        var id = selnode.id;
		id = id.slice(0, -1);

		this.fncDestroyFile(id);
	},
	
	fncGetIdToDestroy : function(){
        var selmodel = this.grid_list.getSelectionModel() ;
        var selrec = selmodel.getSelected() ;
        var id = selrec.get("id") ;

		this.fncDestroyFile(id);
	},

    fncDestroyFile : function(id){
        // 確認メッセージ表示
        var ret = confirm( app_localized_message("confirm", "delete_confirm") ) ;
        if( !ret ) return false ;

        // プロジェクトIDを取得
        var project_id = Ext.get('project_id').dom.value ;

		// 非同期リクエスト
		var options =
		{
			url: url_for("/projectfile/destroy"),
			params: {target_file : id, project_id : project_id},
			success: this.onDestroySuccess ,
			failure: this.onDestroyFail,
			scope: this,
			method :'POST'
		} ;
		Ext.Ajax.request(options) ;

    },

	onDestroySuccess : function(response, options){
		var responseobj = Ext.util.JSON.decode(response.responseText) ;

        var success = responseobj.success ;
        var message = responseobj.message ;
        if( success ){
            this.ds_list.reload() ;

			var selnode = this.tree_folder.getNodeById('/') ;

            selnode.loaded = false ;
            selnode.expand() ;
        }
        else{
            alert(message) ;
        }
	},

	onDestroyFail : function(response, options){
		var responseobj = Ext.util.JSON.decode(response.responseText) ;

		var message = responseobj.message ;
		alert(message);
	},

    fncFilesRefresh : function(){
        this.ds_list.reload() ;
        var selmdl = this.tree_folder.getSelectionModel() ;
        var selnode = selmdl.getSelectedNode() ;
        selnode.loaded = false ;
        selnode.expand() ;
    },

    /*==================================================
     * 関数名：fncLoadListData
     * 概　要：ファイルリストデータ取得リクエスト
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    fncLoadListData : function(){

        this.ds_list.load({
            params : {
				node:this.current_node
            }
        }) ;

        var folder_tree = this.tree_folder;
        if (this.current_node) {
            var folder = folder_tree.getNodeById(this.current_node);
            folder.select();
        } else {
            this.tree_root.select() ;
        }

    },

    /*==================================================
     * 関数名：fncFileNew
     * 概　要：ファイル情報登録ダイアログを表示する
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    fncFileNew : function(){
        // 現在のパスを取得
        var node = this.current_node ;
        // プロジェクトIDを取得
        var project_id = Ext.get('project_id').dom.value ;
        
        this.dialogs.FileDlgEdit.fncShowDialog({
            project_id : project_id,
            parent_node : node,
            on_save : [ this.onFileDlgEdit_save.createDelegate(this) ],
            on_close : [ this.onFileDlgEdit_close.createDelegate(this) ]
        }) ;
    },

    /*==================================================
     * 関数名：fncFolderNew
     * 概　要：ファイルフォルダ情報登録ダイアログを表示する
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    fncFolderNew : function(){
        var selmdl = this.tree_folder.getSelectionModel() ;
        var selnode = selmdl.getSelectedNode() ;
        if (selnode.id == '0') this.current_node = 0;
        
        // 現在のパスを取得
        var node = this.current_node ;
        // プロジェクトIDを取得
        var project_id = Ext.get('project_id').dom.value ;
        
        this.dialogs.FileDlgFolderEdit.fncShowDialog({
            project_id : project_id,
            parent_node : node,
            fname : null,
            on_save : [ this.onFileDlgFolderEdit_save.createDelegate(this) ],
            on_close : [ this.onFileDlgFolderEdit_close.createDelegate(this) ]
        }) ;
    },

    /*==================================================
     * 関数名：fncFolderEdit
     * 概　要：mainリスト用
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    fncFolderEdit : function(){
        var selmodel = this.grid_list.getSelectionModel() ;
        var selrec = selmodel.getSelected() ;
        var id = selrec.get("id") ;
		var fname = selrec.get("fname") ;
		this.fncDoEditFolder(id, fname);
    },

	//submenuリスト用
	fncInsideFolderEdit : function(){
        var selmdl = this.tree_folder.getSelectionModel() ;
        var selnode = selmdl.getSelectedNode() ;
		var id = selnode.id ;
		id = id.slice(0, -1);
		var fname = selnode.text ;
		this.fncDoEditFolder(id, fname);
	},

	fncDoEditFolder : function(id, fname){
        // 現在のパスを取得
        var node = this.current_node ;
        // プロジェクトIDを取得
        var project_id = Ext.get('project_id').dom.value ;
        
        this.dialogs.FileDlgFolderEdit.fncShowDialog({
            project_id : project_id,
            parent_node : node,
            folder_id : id,
            fname : fname,
            on_save : [ this.onFileDlgFolderEdit_save.createDelegate(this) ],
            on_close : [ this.onFileDlgFolderEdit_close.createDelegate(this) ]
        }) ;
	},

    /*==================================================
     * 関数名：fncFormatNumber
     * 概　要：数値をフォーマットした文字列を返す
     * 引　数：value                    Number            数値
     * 戻り値：フォーマット文字列
     ==================================================*/
    fncFormatNumber : function(value){
        var ret ;
        if( value ){
        	var num = String(value) ;
        	while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
        	ret = num ;
        }
        else{
            ret = "" ;
        }
        return ret ;
    },

    /*==================================================
     * 関数名：onDocLoaded
     * 概　要：ドキュメントロードイベントハンドラ
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    onDocLoaded : function(eventObject, target){
	    //-----------------------------
        // スーパークラスの処理を実行
	    //-----------------------------
        App.ProjectfileIndexFile.superclass.onDocLoaded.call(this, eventObject, target);

        // ページレンダリング
        this.fncRender() ;
        // 各イベント設定
        this.fncSetEvent() ;

        // 初期データ読込
        this.fncLoadListData() ;

    },

    /*==================================================
     * 関数名：onFileDlgEdit_save
     * 概　要：ファイル情報登録ダイアログ保存コールバック。
     *       ：一覧のリロードを行う
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    onFileDlgEdit_save : function(){
        var selmdl = this.tree_folder.getSelectionModel() ;
        var selnode = selmdl.getSelectedNode() ;
        selnode.loaded = false ;
        selnode.expand() ;
        this.current_node = selnode.id ;
        this.fncLoadListData() ;
    },
    
    /*==================================================
     * 関数名：onFileDlgEdit_close
     * 概　要：ファイル情報登録ダイアログ閉じるコールバック。
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    onFileDlgEdit_close : function(){
    },

    /*==================================================
     * 関数名：onFileDlgFolderEdit_save
     * 概　要：ファイルフォルダ情報登録ダイアログ保存コールバック。
     *       ：一覧のリロードを行う
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    onFileDlgFolderEdit_save : function(){
		this.ds_list.reload() ;
		
		var selnode = this.tree_folder.getNodeById('/') ;
		
		selnode.loaded = false ;
		selnode.expand() ;
    },

    /*==================================================
     * 関数名：onFileDlgFolderEdit_close
     * 概　要：ファイルフォルダ情報登録ダイアログ閉じるコールバック。
     * 引　数：なし
     * 戻り値：なし
     ==================================================*/
    onFileDlgFolderEdit_close : function(){
    },

    /*==================================================
     * 関数名：onNodeClick
     * 概　要：フォルダツリーノードクリックイベントハンドラ
     * 引　数： node            Ext.tree.TreeNode        ツリーノードオブジェクト
     *             e                Ext.EventObject             イベントオブジェクト
     * 戻り値：なし
     ==================================================*/
    onNodeClick : function( node,  e){
        this.current_node = node.id ;
        this.ds_list.load({params:{node:this.current_node}}) ;
    },

    /*==================================================
     * 関数名：onTreeBeforeLoad
     * 概　要：フォルダツリーロード前イベントハンドラ
     * 引　数： treeloader     Ext.tree.TreeLoader     ツリーローダーオブジェクト
     *             node            Ext.tree.TreeNode        ツリーノードオブジェクト
     *             e                Ext.EventObject             イベントオブジェクト
     * 戻り値：なし
     ==================================================*/
    onTreeBeforeLoad : function( treeloader, node, callback  ){
        treeloader.baseParams.file_folder_id = node.attributes.id;
    }

}

// App.Pageを継承
Ext.extend(App.ProjectfileIndexFile, App.Page, app_file_index_methods);
//=============================
// 現在のページオブジェクトとして生成
//=============================
App.Page.thispage = new App.ProjectfileIndexFile() ;
